"""
肯德基抓取数据。

编写步骤：
1、请求头定制，封装一个函数
2、发送请求，封装成一个函数
3、接收数据并保存，封装成一个函数

"""

import urllib.request
import urllib.parse


# post 请求
# 请求对象的定制
def create_request(page, cname):
	post_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'

	headers = {
		'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
		'X-Requested-With': 'XMLHttpRequest',
		'cookie': 'Hm_lvt_2f2eee3c5ce987711befd5b6c7761b4f=1610675686; Hm_lvt_944939bd3a8c29c155a3f72b21655685=1610675691; WT_FPC=id=22d34f0c8b2a16325d21610675709898:lv=1610675863310:ss=1610675709898; ASP.NET_SessionId=teze34ti1pxwvwrfde34selv; route-cell=ksa; Hm_lvt_1039f1218e57655b6677f30913227148=1610675664,1610837746; Hm_lpvt_1039f1218e57655b6677f30913227148=1610837746; SERVERID=b9a24dfa0858e01aa6ecd705cdaafe55|1610839158|1610837751'
	}

	data = {
		'cname': cname,
		'pid': '',
		'pageIndex': page,
		'pageSize': 10,
	}

	# data 数据，将 字典 形式转换成 url 可识别的模式，再转换为 字节
	data = urllib.parse.urlencode(data).encode('utf-8')
	# 请求头的定制
	request = urllib.request.Request(url=post_url, data=data, headers=headers)
	return request


# 发送请求，并返回响应对象
def get_content(request):
	response = urllib.request.urlopen(request)
	content = response.read().decode('utf-8')
	return content


# 数据的下载
def down_load(page, content):
	# filename = 'kedeji/第%s页.json' % str(page)
	filename = 'kedeji/第{}页.json'.format(str(page))
	# 写入文件要以 字节 的形式
	with open(filename, 'w', encoding='utf-8') as file:
		file.write(content)


# 程序入口
if __name__ == '__main__':
	#
	cname = input('请输入查询地点：')
	start_page = int(input('请输入起始页码：'))
	end_page = int(input('请输入结束页码：'))

	for page in range(start_page, end_page + 1):
		request = create_request(page, cname)
		content = get_content(request)
		down_load(page, content)
